'''
Created on 19/04/2013

@author: jean
'''
from pm.models.Usuarios import Usuarios
from pm.models.Permisos import Permisos
from pm.models.Roles import Roles
from pm.models.UsuariosRoles import UsuariosRoles
from pm.models.RolesPermisos import RolesPermisos


def poseePermiso(usuario, permiso):
    """
    Metodo que controla si un usuario posee ese permiso 
    @param usuario: usuario del que se verfica el permiso
    @param permiso: el codigo de permiso que va a verificarse
    """
    band = False
    queryUsuarios =  Usuarios.query.filter(Usuarios.user_name == usuario).filter(Usuarios.activo == True)
    for u in queryUsuarios:
        queryUsuariosRoles =  UsuariosRoles.query.filter(UsuariosRoles.id_usuario == u.id_usuario).filter(UsuariosRoles.activo == True)
        for usuR in queryUsuariosRoles:
            queryRolesPermisos = RolesPermisos.query.filter(RolesPermisos.id_rol == usuR.id_rol).filter(RolesPermisos.activo == True)
            for rolP in queryRolesPermisos:       
                queryPermisos = Permisos.query.filter(Permisos.id_permiso == rolP.id_permiso).filter(Permisos.activo == True)
                for rp in queryPermisos:
                    if rp.nombre == permiso:
                        band= True
    return band

def obtenerPermisos(usuario):
    """
    Metodo que obtiene los Permisos de un usuario 
    @param usuario: el usuario del cual se desean obtener los parametros
    """
    band = []
    queryUsuarios =  Usuarios.query.filter(Usuarios.user_name == usuario).filter(Usuarios.activo == True)
    for u in queryUsuarios:
        queryUsuariosRoles =  UsuariosRoles.query.filter(UsuariosRoles.id_usuario == u.id_usuario).filter(UsuariosRoles.activo == True)
        for usuR in queryUsuariosRoles:
            roles = Roles.query.filter(Roles.id_rol == usuR.id_rol).filter(Roles.activo == True)
            for r in roles:
                queryRolesPermisos = RolesPermisos.query.filter(RolesPermisos.id_rol == r.id_rol).filter(RolesPermisos.activo == True)
                for rolP in queryRolesPermisos:       
                    queryPermisos = Permisos.query.filter(Permisos.id_permiso == rolP.id_permiso).filter(Permisos.activo == True)
                    
                    for rp in queryPermisos:
                        band.append(rp.nombre)
    return band
